"""
@name : app
@author : FanMY_71
@projectname: myflask
@Time: 2022/8/16-22:21
"""
# 放置核心对象
import os
from flask import Flask


def create_app(config=None):
    # 生成核心对象
    app = Flask(__name__)
    # 加载config配置
    # app.config 本质上就是dict  继承dict类，添加了很多方法
    # 下面这行代码相当于是这样的：app.config['PORT']=9000
    app.config.from_object("config.settings")  # 保证config和server是一个level的
    """
            if isinstance(obj, str):
            obj = import_string(obj)
        for key in dir(obj):
        # 只有是大写才获取key属性，所以我们config.settings里面的属性都是大写
            if key.isupper():  
                self[key] = getattr(obj, key)
    """
    # 因为from_object方法里面确定了括号后面的东西一定要存在

    # 加载系统环境配置
    # 根据不同的系统环境变量，加载不同的配置文件。
    # 例如：测试环境的环境变量是FLASK_CONF='/love/you'，但是在生产环境的环境变量是FLASK_CONF='/love/myself'，
    # 那么我们就可以根据FLASK_CONF这个变量加载不同环境的配置文件
    if 'FLASK_CONF' in os.environ:
        app.config.from_envvar("FLASK_CONF")

    # 函数传入的参数
    if config is not None:
        if isinstance(config, dict):
            app.config.update(config)
        elif config.endwith('.py'):
            app.config.from_pyfile(config)

    # 绑定蓝图
    import router  # 导入之后会自动运行router下面的__init__.py
    router.init_app(app)  # 给传入的参数配置蓝图
    # 绑定orm对象
    import model
    model.init_app_db(app)

    return app
